/**
 *三、使用enum关键字定义枚举类 和 枚举类常用方法
 * 1.toString()方法:返回当前枚举类对象常量的名称
 * 2.values()方法：返回枚举类的对象数组。该方法可以很方便地遍历所有的枚举值。
 *3.valuesOf(String str)方法：可以把一个字符串转为对应的枚举类的对象。要求字符串必须是枚举类对象
 *
 * 说明：定义的枚举类默认继承于class java.lang.Enum类
 *
 * 四、使用enum关键字定义的枚举类实现接口的情况
 *     情况一：实现接口，在enum类中实现抽象方法
 *     情况二：让枚举类的对象分别实现接口中的抽象方法
 */
public class EnumTest1 {
    public static void main(String args[])
    {
        Season1 summer = Season1.SUMMER;
        //1.toString
        System.out.println(summer.toString());
        System.out.println(Season1.class.getSuperclass());//class java.lang.Enum

        //2.values方法
        Season1[] values = Season1.values();
        for(int i=0;i<values.length;i++)
        {
            System.out.println(values[i]);
            values[i].show();
        }

        //3.valuesOf(String objName)方法:返回枚举类中对象名是objName的对象。
        Season1 spring = Season1.valueOf("SPRING");
        //如果没有objName的枚举类对象，则抛异常：IllegalArgumentException
//        Season1 spring1 = Season1.valueOf("SPRING1");
//        System.out.println(spring1);
        System.out.println(spring);
       // spring.show();单独调
    }
}

interface info
{
    void show();
}
enum Season1 implements info
{
    //1.提供当前枚举类的多个对象：多个对象之间用“，”隔开，末尾对象“;”结束
    SPRING ("春天","春暖花开"){
        @Override
        public void show() {
            System.out.println("这是春天");
        }
    },
    SUMMER("夏天","夏日炎炎"){
        @Override
        public void show() {
            System.out.println("这是夏天");
        }
    },
    AUTUMN("秋天","秋高气爽"){
        @Override
        public void show() {
            System.out.println("这是秋天");
        }
    },
    WINTER("冬天","冰天雪地"){
        @Override
        public void show() {
            System.out.println("这是冬天");
        }
    };

    //2.声明Season()对象的属性：private final修饰
    private final String seasonName;
    private final String seasonDesc;

    //3.私有化类的构造器，并给对象属性赋值

    private Season1(String seasonName,String seasonDesc)
    {
        this.seasonName = seasonName;
        this.seasonDesc = seasonDesc;
    }

    //4.其他诉求1：获取枚举类对象的属性

    public String getSeasonName() {
        return seasonName;
    }

    public String getSeasonDesc() {
        return seasonDesc;
    }

    @Override
    public void show() {
        System.out.println("这是一个季节");
    }
}